package com.lhy.ltss.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @description:
 * 线程池
 * @author: 李汇远
 */
@Configuration
public class ThreadPoolConfig {

    @Bean
    public ThreadPoolExecutor poolExecutor(){
        // 无界线程池，线程池的任务队列可以无限制的添加新的任务，
        // 当线程池的线程数达到corePoolSize后，则直接进入队列等待
        return new ThreadPoolExecutor(
                // 核心线程数量
                50,
                // 此时最大线程数量参数失效
                50,
                // 1000 * 时间单位
                1000,
                // 时间单位
                TimeUnit.MILLISECONDS,
                // 链表任务队列
                new LinkedBlockingQueue<Runnable>(),
                // 默认线程工厂
                Executors.defaultThreadFactory(),
                // 拒绝策略，如果线程池的线程数量达到上限，
                // 该策略会把任务队列中的任务放在调用者线程当中运行
                new ThreadPoolExecutor.CallerRunsPolicy());
    }
}
